package ar.com.sistventa.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import ar.com.sistventa.dao.CategoriaDAO;
import ar.com.sistventa.entities.Categoria;
import ar.com.sistventa.utils.Constantes;

public class CategoriaDAOImpl extends EntidadDAOImpl<Categoria> implements
		CategoriaDAO {

	@SuppressWarnings("unchecked")
	@Override
	public List<Categoria> busquedaPorFiltro(String descripcion)
			throws HibernateException {

		List<Categoria> categorias = new ArrayList<Categoria>();

		try {
			iniciaConexion();
			Criteria criteria = getSession().createCriteria(Categoria.class);
			criteria.add(Restrictions.like("descripcion", descripcion + "%"));
			criteria.addOrder(Order.asc("descripcion"));

			categorias = (List<Categoria>) criteria.list();

		} catch (Exception e) {
			logger.error("Error en " + getClass());

		} finally {
			this.getSession().close();
		}

		return categorias;
	}

	@Override
	public void bajaLogicaCategoria(Categoria categoria)
			throws HibernateException {
		categoria.setEstadoLogico(Constantes.BAJA);
		actualizar(categoria);

	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Categoria> getAllCategoria() throws HibernateException {
		List<Categoria> categorias = new ArrayList<Categoria>();

		try {
			iniciaConexion();
			Criteria criteria = getSession().createCriteria(Categoria.class);
			criteria.add(Restrictions.eq("estadoLogico", "A"));
			criteria.addOrder(Order.asc("descripcion"));
			categorias = (List<Categoria>) criteria.list();

		} catch (Exception e) {
			logger.error("Error en " + getClass());
		} finally {
			this.getSession().close();
		}

		return categorias;
	}

}
